package com.itheima;

public class TestLambda {
    public static void main(String []args){
        testA();
        testB();
        testC();
        testD();

    }
    public static void testA(){
        //1.创建接口A的匿名内部类对象
        A a1 = new A() {
            @Override
            public void show(String name, int age){
                System.out.println(name + "," + age);
            }
        };
        a1.show("叶帆", 25);
        //2.将匿名内部类对象改成Lambda表达式
        A a2 = (name,age) -> System.out.println(name + "," + age);
        a2.show("萧炎",20);

        //3.使用方法引用替换Lambda表达式（静态方法）
        A a3 = TestLambda::show3;
        a3.show("陈汉升",25);

    }

    public static void testB() {

        //1.创建B接口的匿名内部类对象
        B b1 = new B() {
            @Override
            public void show(String name) {
                System.out.println(name);
            }
        };

        //2.创建B接口的匿名内部类对象
        B b2 = name -> System.out.println(name);
        b2.show("尤柯");

        //3.创建B接口的方法引用对象
        B b3 = System.out::println;;
        b3.show("张小凡");
    }


    public static void testC(){
        //1.创建C接口的匿名内部类对象
        C c1 = new C() {
            @Override
            public String show(String name) {
                return "name = " + name;
            }
        };
        //2.创建C接口的Lambdab表达式对象
        C c2 = name -> "name = " + name;

        //3.创建C接口的方法引用对象
        C c3 = TestLambda::show4;
        String k = c3.show("杨开");
        System.out.println(k);

    }


    public static void testD(){
        D d1 = new D() {
            @Override
            public int max(int a, int b) {
                // return a > b ? a : b;
                return Math.max(a,b);
            }
        };
        D d2 = (a, b) -> a > b ? a : b;

        //D d3 = (a, b) -> Math.max(a,b);
        D d3 = Math::max;
        int max = d3.max(100,200);
        System.out.println(max);

    }


    //定义一个成员方法，故意让返回值和形参和接口A中方法一致
    public static void show2(String name, int age){
        System.out.println("show2:" + name + "," + age);
    }
    public static void show3(String name, int age){
        System.out.println("show3:" + name + "," + age);
    }
    public static  String show4(String name){
        return  "name = " + name;
    }

}





